using System;
using System.IO;
using System.Linq;

namespace AutoTestReporter
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("=== 自动测试报告生成器 ===\n");

            // 默认路径设置
            var projectRoot = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), ".."));
            var testResultsDir = Path.Combine(projectRoot, "Application.Test", "TestResults");
            var outputDir = Path.Combine(projectRoot, "Application.Test.AutoTestReporterAutoTestReporter");

            // 检查参数
            if (args.Length > 0)
            {
                testResultsDir = args[0];
            }
            if (args.Length > 1)
            {
                outputDir = args[1];
            }

            try
            {
                // 确保目录存在
                if (!Directory.Exists(testResultsDir))
                {
                    Console.WriteLine($"错误: 测试结果目录不存在: {testResultsDir}");
                    return;
                }

                // 查找最新的TRX文件
                var trxFiles = Directory.GetFiles(testResultsDir, "*.trx")
                    .OrderByDescending(f => File.GetLastWriteTime(f))
                    .ToArray();

                if (trxFiles.Length == 0)
                {
                    Console.WriteLine($"警告: 在目录 {testResultsDir} 中未找到TRX文件");
                    Console.WriteLine("请先运行单元测试生成TRX报告文件");
                    return;
                }

                var latestTrxFile = trxFiles[0];
                Console.WriteLine($"找到TRX文件: {Path.GetFileName(latestTrxFile)}");
                Console.WriteLine($"文件路径: {latestTrxFile}");
                Console.WriteLine($"最后修改时间: {File.GetLastWriteTime(latestTrxFile)}\n");

                // 生成报告
                var generator = new TestReportGenerator();
                var reportPath = generator.GenerateReportFromTrx(latestTrxFile, outputDir);

                Console.WriteLine($"✅ 测试报告生成成功!");
                Console.WriteLine($"报告路径: {reportPath}");
                Console.WriteLine($"报告大小: {new FileInfo(reportPath).Length} 字节\n");

                // 显示报告统计信息
                var reportContent = File.ReadAllText(reportPath);
                var lines = reportContent.Split('\n');
                
                Console.WriteLine("=== 报告摘要 ===");
                foreach (var line in lines.Take(20)) // 显示前20行作为摘要
                {
                    if (line.StartsWith("-") || line.StartsWith("|") || line.StartsWith("#"))
                    {
                        Console.WriteLine(line);
                    }
                }

                Console.WriteLine("\n=== 操作完成 ===");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"❌ 错误: {ex.Message}");
                Console.WriteLine($"堆栈跟踪: {ex.StackTrace}");
            }
        }
    }
}